using System;
using UnityEngine;

public abstract class BulletBase : MonoBehaviour
{
	public abstract GameObject GameObject { get; }

	public abstract Color FlyParticleColor { get; }

	public abstract float DefaultRadius { get; }

	public abstract float SeparatingForce { get; }

	public abstract bool Alive { get; }

	public abstract Vector3 Position { get; }

	public abstract Vector3 Velocity { get; }

	public abstract float Damage { get; }

	public abstract Vector3 Impulse { get; }

	public abstract bool Targeting { get; }

	public abstract EnemyPart ImpaledPart { get; }

	public abstract bool Impaled { get; }

	public abstract Vector3 GetTargetPoint();

	public abstract void Kill();

	public abstract void ManualStart(EnemyPart target, Vector3 localTargetPoint, Vector3 upVector, Vector3 gunPoint, Vector3 initialDirection, ParticleRenderer particleRenderer, Mesh mesh, float scale);

	public abstract void ManualFixedUpdate(float deltaTime);

	public abstract void ManualUpdate(float deltaTime);

	public abstract Plane GetPlane();

	public abstract void OnHitEnemy(out float forceFactorOut, out Enemy.DamageType damageTypeOut, float damageRatio, Transform targetTransform, Vector3 normal, EnemyPart part);

	public abstract void OnHitUnbreakable(Vector3 normal);

	public abstract float SimulateError(Vector3 firePoint, Vector3 initialDirection, Vector3 targetPoint, Vector3 targetVelocity, int iteration);

	public abstract Mesh CreateMesh(float outerRadius, float innerRadius, float holeRadius, float thickness);

	public Action<BulletBase> OnKilled;

}
